[Pascal]怎样把四皇后改为N皇后?

来源:百度知道 编辑:UC知道 时间:2024/05/13 03:48:35
我的程序. 最好请按我的程序改.>

Program xx;
Var
A:Array[1..4]of Integer;
Procedure Try(l:Integer);
Var
k,i,l:Integer;
Begin
If i:4+1 then writeln(a[1],A[2],A[3],A[4])
Else For i=0 to 4 dO bEGIN
k:=0;
For j:=1 to l-1 dO Begin
If A[j]=0 then k:=1;
if a[J]-J+I-1 THEN K:=1
If A[j]+j=i+1 then k:=1 end;
If k=0 then Begin
A[l]=i;
Try(l+1) End; End; ENd;
Begin
Try(1);
Readln;
End.

#include <stdio.h>
#include <math.h>

#define N 8

void Check(int p[]){
int i,j;
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
if(abs(p[j]-p[i])==j-i)
return;
for(i=0;i<N;i++)
printf("%d ",p[i]);
printf("\n");
}

void Permute(int n,int p[]){
int i,j;
if(n==1)
Check(p);
for(i=0,j=n-1;i<N;i++)
if(!p[i]){
p[i]=j; Permute(j,p); p[i]=0;
}
}

int main(){
static int p[N];
int n=N;
Permute(n+1,p);
return 0;
}

这程序漏洞百出
给你个正确程序program Project1;
const max=10;
type arr=array[1..max]of integer;
var a:arr; n:integer;
procedure aqueen(n:integer);
var i,j,k,total:integer;
begin
total:=0;
for i:=1 to n do a[i]:=1;
i:=1;
while true do
begin
if (a[i]<=n) then